package collectionsx

import collectionsx.Listx as Listx1

/*-*- coding:utf-8 -*-
* @Author  : ygree
* @Time    : 2021/7/4 3:20
* @Software : IntelliJ IDEA
*/
private class Listx {
    fun create() {
        val list = listOf(12, 32, 35)
//        不可变集合
//        list[2] = 12 //err
        println(list[3])//索引越界
        val toList = list.toMutableList()//转换为可变列表
        toList[2] = 12
        println(list)

    }

    fun method() {
        /**在Kotlin中，支持内容修改的列表叫可变列表,要创建可变列表，可以使用mutableListOf函数。
         * List还支持使用toList和toMutableList函数动态实现只读列表和可变列表的相互转换。
         */

        val listOf = listOf(1, 2, 3)
        println("listOf.lastIndex     : ${listOf.lastIndex}")
        println("listOf.size          : ${listOf.size}")
        println("listOf.indices       : ${listOf.indices}")
        println("listOf.isEmpty       : ${listOf.isEmpty()}")
        println("listOf.count       : ${listOf.count()}")
        println("listOf.contains       : ${listOf.contains(1)}")
        println("listOf.containsAll   : ${listOf.containsAll(listOf)}")
        println("listOf.plus 1        : ${listOf.plus(1)}")
        println("listOf.indexOf 0     : ${listOf.indexOf(0)}")
        println("listOf.indexOf 1     : ${listOf.indexOf(1)}")
        println("listOf.plusElement 4 : ${listOf.plusElement(4)}")
        println("listOf.lastIndexOf 1 : ${listOf.lastIndexOf(1)}")
        println("listOf.listIterator  : ${listOf.listIterator()}")
        println("listOf.subList 0 2   : ${listOf.subList(0, 2)}")
        println("listOf.random        : ${listOf.random()}")
        println("listOf.randomOrNull  : ${listOf.randomOrNull()}")
        println("listOf.toMutableList : ${listOf.toMutableList()}")
        println("listOf.asReversed : ${listOf.asReversed()}")
    }

    fun methodExtant() {
        val listOf = listOf(1, 2, 3)

        listOf.parallelStream()


        println("listOf.lastIndex     : ${listOf.lastIndex}")
        println("listOf.count         : ${listOf.count()}")
    }

    fun mutableList() {
        /**能修改可变列表的函数有个统一的名字:mutator函数
        添加元素运算符与删除元素运算符（还记得C++中的运算符重载吗?)
        基于lambda表达式指定的条件删除元素
         */

        val list = mutableListOf(12, 32, 35)
        val lists = mutableListOf("1235", "as", "d", "1234")
        list += 23//==list.add(23)
        list -= 35
        println("list:$list")

//        list.removeIf { it.contains("12") }//int 不能使用
        lists.removeIf { it.contains("12") }//如果包含的话即移除->String型，it：即集合中的每个元素
//        包含字符“12”的 元素全部移除
        println("lists:$lists")


    }

    //遍历元素
    fun forElement() {
        val lists = mutableListOf("1235", "as", "d", "1234")
        for (s in lists) {
            print("$s,")
        }
        lists.forEach {
            print("$it,")
        }
        lists.forEachIndexed { index, item ->
            print("$index,$item")
        }

    }

    fun jiegou() {
        val lists = mutableListOf("1235", "as", "d", "1234")
        var (a, b, c, d) = lists
        var (aa, _, _, dd) = lists//_跳过该元素

        println("$a,$b,$c,$d")
        println("$aa,$dd")
    }
}

private  fun main() {
    Listx1().method()
    println("-----------------")

}